[MySQL] Wspólni znajomi

mam taką tabelę w bazie:

CREATE TABLE friends (
id int(11) NOT NULL auto_increment,
user1 int(11) NOT NULL COMMENT 'id usera 1 - zapraszajacego',
user2 int(11) NOT NULL COMMENT 'id usera 2 - zaproszonego',
status int(1) NOT NULL default '0' COMMENT '0 - niezaakceptowane, 1 - zaakceptowane',
data int(11) NOT NULL,
PRIMARY KEY (id),
KEY id (user1,user2,status,data)
)

W tej tabeli przechowuję listę relacji ze znajomymi (user1 - mój id, user2 - id znajomego)

A tutaj mam zapytanie wyciągające wspólnych znajomych moich i znajomego:

SET @user = 2; @znajomy = 921;

SELECT
IF(f1.user1 = @user, f1.user2, f1.user1) AS user_id
FROM
friends AS f1
WHERE
(f1.user1 = @user OR f1.user2 = @user) AND
f1.status = 1
AND
IF(f1.user1 = @user, f1.user2, f1.user1)
IN (
SELECT
IF(f2.user1 = @user, f2.user2, f2.user1)
FROM
friends AS f2
WHERE
(f2.user1 = @znajomy OR f2.user2 = @znajomy) AND
f2.status = 1
)
HAVING
user_id != @znajomy;

Potrzebuje pomoc w wymyśleniu jakiegoś krótszego i optymalnego zapytania. Widziałem tutaj kilka prostych zapytań, jednak nie działają...

Proszę o pomoc, pozdrawiam

  • Do tabeli należy dodawać dwa rekordy za każdym razem, gdy użytkownik zaprasza kogoś do grona swoich znajomych.

    Jeżeli użytkownik A zaprasza użytkownika B, to użytkownik B staje się znajomym użytkownika A, ale również użytkownik A staje się znajomym użytkownika B.

    Nie wiem czy dobrze rozumiem pytanie, więc dwie odpowiedzi ;) Wszyscy znajomi dwóch użytkowników (np. Twoi oraz wybranego znajomego):

    SELECT DISTINCT user2 FROM friends WHERE user1 IN (10, 20)
    

    Wszyscy użytkownicy znajdujący się jednocześnie na liście Twoich znajomych i wybranego znajomego:

    SELECT user2 FROM friends WHERE user1 IN (10, 20) GROUP BY user2 HAVING COUNT(user2) > 1
    

Zaloguj się, aby dodać swoją odpowiedź